﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using DTO;
using DAO;

namespace QuanLyCuaHangVideo
{
    public partial class frmMain : Form
    {
        public static string user;

        public frmMain()
        {
            InitializeComponent();
        }

        public void refreshForm()
        {
            lbUser.Text = "Hãy đăng nhập đi nào!";

            mnuKH.Enabled = false;
            mnuCD.Enabled = false;
            mnuNV.Enabled = false;
            mnuThue.Enabled = false;
            mnuTra.Enabled = false;
            mnuBaoCao.Enabled = false;

            txtCMND.Text = string.Empty; txtDienThoai.Text = string.Empty; txtTimCD.Text = string.Empty;
            txtCMNDNV.Text = string.Empty; txtDienThoaiNV.Text = string.Empty; txtTimKH.Text = string.Empty;
            txtHoTen.Text = string.Empty; txtLuong.Text = string.Empty; txtTimNV.Text = string.Empty;
            txtHoTenNV.Text = string.Empty; txtID.Text = string.Empty; txtSoLuong.Text = string.Empty;
            txtDiaChi.Text = string.Empty; txtConLai.Text = string.Empty; txtTieuDe.Text = string.Empty;
            txtDiaChiNV.Text = string.Empty; txtDonGia.Text = string.Empty;

            dtNgayNhap.Value = DateTime.Now;

            rbHoTen.Checked = true;
            rbMaCD.Checked = true;

            dgvKH.Rows.Clear();
            dgvPhim.Rows.Clear();
            dgvNV.Rows.Clear();

            dockCD.Visible = false;
            dockNV.Visible = false;
            dockKH.Visible = false;
        }

        #region Common Events
        void login_FireEventLoginSuccess(object sender, LoginSuccessEventArgs e)
        {
            refreshForm();
            user = e.HoTen;
            lbUser.Text = "Người dùng: " + e.HoTen;
            mnuKH.Enabled = true;
            mnuCD.Enabled = true;
            if (e.LoaiNV.Equals("1"))
                mnuNV.Enabled = true;
            else
                mnuNV.Enabled = false;
            mnuThue.Enabled = true;
            mnuTra.Enabled = true;
            if (e.LoaiNV.Equals("1") || e.LoaiNV.Equals("2"))
                mnuBaoCao.Enabled = true;
            else
                mnuBaoCao.Enabled = false;
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Close();
        }

        //logout event
        private void btnDangXuat_Click(object sender, EventArgs e)
        {
            refreshForm();
        }

        //frmDangNhap
        private void btnDangNhap_Click(object sender, EventArgs e)
        {
            frmDangNhap frm = new frmDangNhap();
            frm.FireEventLoginSuccess += new FireEventForLoginSuccess(login_FireEventLoginSuccess);
            frm.ShowDialog();
        }

        //form Load
        private void Form1_Load(object sender, EventArgs e)
        {
            lbUser.Text = "Chưa đăng nhập";

            mnuKH.Enabled = false;
            mnuCD.Enabled = false;
            mnuNV.Enabled = false;
            mnuThue.Enabled = false;
            mnuTra.Enabled = false;
            mnuBaoCao.Enabled = false;

            rbHoTen.Checked = true;
            rbMaCD.Checked = true;

            dockCD.Visible = false;
            dockNV.Visible = false;
            dockKH.Visible = false;
        }

        private void mnuHelp_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Đội ngũ phát triển ứng dụng: Diệu Trang, Thiện Ý, Anh Toàn, Bảo Trân, Nguyễn Huệ");
        }

        //Mở form cho thuê và form báo cáo
        private void btnLapPhieuThue_Click(object sender, EventArgs e)
        {
            frmThue frm = new frmThue();
            frm.Show();
        }

        private void mnuBaoCao_Click(object sender, EventArgs e)
        {
            frmBaoCao frm = new frmBaoCao();
            frm.ShowDialog();
        }

        //btn Mở giao diện KH
        private void mnuKH_Click(object sender, EventArgs e)
        {
            bar2.Visible = true;
            dockKH.Visible = true;
            if (dockNV.Visible == true)
            {
                dockNV.Visible = false;
                dockNV.Visible = true;
            }
            if (dockCD.Visible == true)
            {
                dockCD.Visible = false;
                dockCD.Visible = true;
            }
        }

        //btn mở giao diện NV
        private void btnNhanVien_Click(object sender, EventArgs e)
        {
            bar2.Visible = true;
            dockNV.Visible = true;
            if (dockCD.Visible == true)
            {
                dockCD.Visible = false;
                dockCD.Visible = true;
            }
            if (dockKH.Visible == true)
            {
                dockKH.Visible = false;
                dockKH.Visible = true;
            }
        }

        //btn Mở giao diện Phim
        private void mnuCD_Click(object sender, EventArgs e)
        {
            bar2.Visible = true;
            dockCD.Visible = true;
            if (dockNV.Visible == true)
            {
                dockNV.Visible = false;
                dockNV.Visible = true;
            }
            if (dockKH.Visible == true)
            {
                dockKH.Visible = false;
                dockKH.Visible = true;
            }
        }
        #endregion

/*****************************************************************************************************/
        #region KhachHang

        //Lấy DSKH Load data cho GridView
        public void LayDSKH()
        {
            dgvKH.Rows.Clear();
            List<KhachHang> dsKH = new List<KhachHang>();
            dsKH = KhachHangDAO.LayDSKH();
            for (int i = 0; i < dsKH.Count; i++)
            {
                dgvKH.Rows.Add(dsKH[i].ID, dsKH[i].HoTen, dsKH[i].CMND, dsKH[i].DiaChi, dsKH[i].DienThoai);
                dgvKH.Rows[dgvKH.RowCount - 1].Tag = dsKH[i];
            }
        }

        //btn lấy danh sách KH
        private void btnDSKH_Click(object sender, EventArgs e)
        {
            LayDSKH();
        }

        //btn Thêm KH
        private void btnThemKH_Click(object sender, EventArgs e)
        {
            frmThemKH frm = new frmThemKH();
            frm.ShowDialog();
        }

        //btn Xóa KH
        private void btnXoaKH_Click(object sender, EventArgs e)
        {
            if (dgvKH.CurrentRow.Tag != null)
            {
                if (MessageBox.Show("Bạn có thật muốn xóa ?", "Hỏi", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    KhachHang khChon = (KhachHang)dgvKH.CurrentRow.Tag;
                    bool del = KhachHangDAO.XoaKH(khChon.ID);
                    if (del == false)
                    {
                        MessageBox.Show("Xóa thất bại");
                    }
                    else
                    {
                        MessageBox.Show("Xóa thành công");
                        LayDSKH();
                    }
                }
            }
            else
            {
                MessageBox.Show("Chưa chọn khách hàng!");
            }
        }

        //btn Sửa KH
        private void btnSuaKH_Click(object sender, EventArgs e)
        {
            if (dgvKH.CurrentRow.Tag != null)
            {
                KhachHang khChon = (KhachHang)dgvKH.CurrentRow.Tag;
                KhachHang kh = new KhachHang();
                kh.ID = khChon.ID;
                kh.HoTen = txtHoTen.Text;
                kh.CMND = txtCMND.Text;
                kh.DiaChi = txtDiaChi.Text;
                kh.DienThoai = txtDienThoai.Text;
                bool update = KhachHangDAO.CapNhatKH(kh);
                if (update == false)
                {
                    MessageBox.Show("Cập nhật thất bại");
                }
                else
                {
                    MessageBox.Show("Cập nhật thành công");
                    LayDSKH();
                }
            }
            else
            {
                MessageBox.Show("Chưa chọn khách hàng!");
            }
        }

        //Tìm KH
        private void btnTimKH_Click(object sender, EventArgs e)
        {
            if (rbHoTen.Checked)
            {
                dgvKH.Rows.Clear();
                List<KhachHang> dsKH = KhachHangDAO.TimKiemHoTen(txtTimKH.Text);
                for (int i = 0; i < dsKH.Count; i++)
                {
                    dgvKH.Rows.Add(dsKH[i].ID, dsKH[i].HoTen, dsKH[i].CMND, dsKH[i].DiaChi, dsKH[i].DienThoai);
                    dgvKH.Rows[dgvKH.RowCount - 1].Tag = dsKH[i];
                }
            }
            else if (rbDiaChi.Checked)
            {
                dgvKH.Rows.Clear();
                List<KhachHang> dsKH = KhachHangDAO.TimKiemDiaChi(txtTimKH.Text);
                for (int i = 0; i < dsKH.Count; i++)
                {
                    dgvKH.Rows.Add(dsKH[i].ID, dsKH[i].HoTen, dsKH[i].CMND, dsKH[i].DiaChi, dsKH[i].DienThoai);
                    dgvKH.Rows[dgvKH.RowCount - 1].Tag = dsKH[i];
                }
            }
            else
            {
                dgvKH.Rows.Clear();
                List<KhachHang> dsKH = KhachHangDAO.TimKiemDienThoai(txtTimKH.Text);
                for (int i = 0; i < dsKH.Count; i++)
                {
                    dgvKH.Rows.Add(dsKH[i].ID, dsKH[i].HoTen, dsKH[i].CMND, dsKH[i].DiaChi, dsKH[i].DienThoai);
                    dgvKH.Rows[dgvKH.RowCount - 1].Tag = dsKH[i];
                }
            } 
        }

        //click vào gridview Khách hàng
        private void dataGridKH_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            txtHoTen.Text = dgvKH.Rows[e.RowIndex].Cells[1].Value.ToString();
            txtCMND.Text = dgvKH.Rows[e.RowIndex].Cells[2].Value.ToString();
            txtDiaChi.Text = dgvKH.Rows[e.RowIndex].Cells[3].Value.ToString();
            txtDienThoai.Text = dgvKH.Rows[e.RowIndex].Cells[4].Value.ToString();
        }

        #endregion

/*****************************************************************************************************/
        #region CD/DVD

        //Load data cho GridView
        public void LayDSPhim()
        {
            dgvPhim.Rows.Clear();
            List<Phim> dsPhim = PhimDAO.LayDSPhim().ToList();
            for (int i = 0; i < dsPhim.Count; i++)
            {
                dgvPhim.Rows.Add(dsPhim[i].ID, dsPhim[i].TieuDe, dsPhim[i].NgayNhap.Value.ToString("dd/MM/yyyy"), dsPhim[i].DonGia.ToString(), dsPhim[i].SoLuong, dsPhim[i].ConLai);
                dgvPhim.Rows[dgvPhim.RowCount - 1].Tag = dsPhim[i];
            }
        }

        //btn Lấy danh sách đĩa
        private void btnDSPhim_Click(object sender, EventArgs e)
        {
            LayDSPhim();          
        }

        //click vào gridview Phim
        private void dgvPhim_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            txtID.Text = dgvPhim.Rows[e.RowIndex].Cells[0].Value.ToString();
            txtTieuDe.Text = dgvPhim.Rows[e.RowIndex].Cells[1].Value.ToString();
            string ns = dgvPhim.Rows[e.RowIndex].Cells[2].Value.ToString();
            string[] temp = ns.Split('/');
            dtNgayNhap.Value = new DateTime(int.Parse(temp[2]), int.Parse(temp[1]), int.Parse(temp[0]));
            txtDonGia.Text = dgvPhim.Rows[e.RowIndex].Cells[3].Value.ToString();
            txtSoLuong.Text = dgvPhim.Rows[e.RowIndex].Cells[4].Value.ToString();
            txtConLai.Text = dgvPhim.Rows[e.RowIndex].Cells[5].Value.ToString();
        }

        // Tìm Phim
        private void btnTimPhim_Click(object sender, EventArgs e)
        {
            if (rbMaCD.Checked)
            {
                dgvPhim.Rows.Clear();
                List<Phim> dsPhim = PhimDAO.TimKiemMaPhim(txtTimCD.Text).ToList();
                for (int i = 0; i < dsPhim.Count; i++)
                {
                    dgvPhim.Rows.Add(dsPhim[i].ID, dsPhim[i].TieuDe, dsPhim[i].NgayNhap.Value.ToString("dd/MM/yyyy"), dsPhim[i].DonGia.ToString(), dsPhim[i].SoLuong, dsPhim[i].ConLai);
                    dgvPhim.Rows[dgvPhim.RowCount - 1].Tag = dsPhim[i];
                }
            }
            else if (rbNgayNhap.Checked)
            {
                dgvPhim.Rows.Clear();
                List<Phim> dsPhim = PhimDAO.TimKiemNgayNhap(txtTimCD.Text).ToList();
                for (int i = 0; i < dsPhim.Count; i++)
                {
                    dgvPhim.Rows.Add(dsPhim[i].ID, dsPhim[i].TieuDe, dsPhim[i].NgayNhap.Value.ToString("dd/MM/yyyy"), dsPhim[i].DonGia.ToString(), dsPhim[i].SoLuong, dsPhim[i].ConLai);
                    dgvPhim.Rows[dgvPhim.RowCount - 1].Tag = dsPhim[i];
                }
            }
            else
            {
                MessageBox.Show("Chưa làm chức năng tìm theo tiêu đề!");
            }
        }
        
        private void btnThemPhim_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Chưa làm chức năng này!");
        }

        //btn Xóa Phim
        private void btnXoaPhim_Click(object sender, EventArgs e)
        {
            if (dgvPhim.CurrentRow.Tag != null)
            {
                if (MessageBox.Show("Bạn có thật muốn xóa ?", "Hỏi", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Phim phChon = (Phim)dgvPhim.CurrentRow.Tag;
                    bool del = PhimDAO.XoaPhim(phChon.ID);
                    if (del == false)
                    {
                        MessageBox.Show("Xóa thất bại");
                    }
                    else
                    {
                        MessageBox.Show("Xóa thành công");
                        LayDSPhim();
                    }
                }
            }
            else
            {
                MessageBox.Show("Chưa chọn CD/DVD!");
            }
        }

        //Cập nhật Phim
        private void btnSuaPhim_Click(object sender, EventArgs e)
        {
            if (dgvPhim.CurrentRow.Tag != null)
            {
                Phim phChon = (Phim)dgvPhim.CurrentRow.Tag;
                Phim ph = new Phim();
                ph.ID = phChon.ID;
                ph.TieuDe = txtTieuDe.Text;
                ph.NgayNhap = dtNgayNhap.Value;
                ph.DonGia = float.Parse(txtDonGia.Text);
                ph.SoLuong = Int32.Parse(txtSoLuong.Text);
                ph.ConLai = Int32.Parse(txtConLai.Text);
                bool update = PhimDAO.CapNhatPhim(ph);
                if (update == false)
                {
                    MessageBox.Show("Cập nhật thất bại");
                }
                else
                {
                    MessageBox.Show("Cập nhật thành công");
                    LayDSPhim();
                }
            }
            else
            {
                MessageBox.Show("Chưa chọn CD/DVD !");
            }
        }

        #endregion

/*****************************************************************************************************/
        #region NhanVien

        //Lấy DSNV Load data cho GridView
        public void LayDSNV()
        {
            dgvNV.Rows.Clear();
            List<NhanVien> dsNV = new List<NhanVien>();
            dsNV = NhanVienDAO.LayDSNV();
            for (int i = 0; i < dsNV.Count; i++)
            {
                dgvNV.Rows.Add(dsNV[i].ID, dsNV[i].HoTen, dsNV[i].Luong, dsNV[i].DiaChi, dsNV[i].CMND, dsNV[i].DienThoai);
                dgvNV.Rows[dgvNV.RowCount - 1].Tag = dsNV[i];
            }
        }

        //btn lấy danh sách NV
        private void btnDSNV_Click(object sender, EventArgs e)
        {
            LayDSNV();
        }

        //btn Thêm NV
        private void btnThemNV_Click(object sender, EventArgs e)
        {
            frmThemNV frm = new frmThemNV();
            frm.ShowDialog();
        }

        //btn Xóa NV
        private void btnXoaNV_Click(object sender, EventArgs e)
        {
            if (dgvNV.CurrentRow.Tag != null)
            {
                if (MessageBox.Show("Bạn có thật muốn xóa ?", "Hỏi", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    NhanVien nvChon = (NhanVien)dgvNV.CurrentRow.Tag;
                    bool del = NhanVienDAO.XoaNV(nvChon.ID);
                    if (del == false)
                    {
                        MessageBox.Show("Xóa thất bại");
                    }
                    else
                    {
                        MessageBox.Show("Xóa thành công");
                        LayDSNV();
                    }
                }
            }
            else
            {
                MessageBox.Show("Chưa chọn nhân viên!");
            }
        }

        //btn Sửa NV
        private void btnSuaNV_Click(object sender, EventArgs e)
        {
            if (dgvNV.CurrentRow.Tag != null)
            {
                NhanVien nvChon = (NhanVien)dgvNV.CurrentRow.Tag;
                NhanVien nv = new NhanVien();
                nv.ID = nvChon.ID;
                nv.HoTen = txtHoTenNV.Text;
                nv.Luong = float.Parse(txtLuong.Text);
                nv.CMND = txtCMNDNV.Text;
                nv.DiaChi = txtDiaChiNV.Text;
                nv.DienThoai = txtDienThoaiNV.Text;
                bool update = NhanVienDAO.CapNhatNV(nv);
                if (update == false)
                {
                    MessageBox.Show("Cập nhật thất bại");
                }
                else
                {
                    MessageBox.Show("Cập nhật thành công");
                    LayDSNV();
                }
            }
            else
            {
                MessageBox.Show("Chưa chọn nhân viên!");
            }
        }

        //Tìm NV
        private void btnTimNV_Click(object sender, EventArgs e)
        {
            if (rbHoTen.Checked)
            {
                dgvNV.Rows.Clear();
                List<NhanVien> dsNV = NhanVienDAO.TimKiemHoTen(txtTimNV.Text);
                for (int i = 0; i < dsNV.Count; i++)
                {
                    dgvNV.Rows.Add(dsNV[i].ID, dsNV[i].HoTen, dsNV[i].Luong, dsNV[i].DiaChi, dsNV[i].CMND, dsNV[i].DienThoai);
                    dgvNV.Rows[dgvNV.RowCount - 1].Tag = dsNV[i];
                }
            }
            else if (rbDiaChi.Checked)
            {
                dgvNV.Rows.Clear();
                List<NhanVien> dsNV = NhanVienDAO.TimKiemDiaChi(txtTimNV.Text);
                for (int i = 0; i < dsNV.Count; i++)
                {
                    dgvNV.Rows.Add(dsNV[i].ID, dsNV[i].HoTen, dsNV[i].Luong, dsNV[i].DiaChi, dsNV[i].CMND, dsNV[i].DienThoai);
                    dgvNV.Rows[dgvNV.RowCount - 1].Tag = dsNV[i];
                }
            }
            else
            {
                dgvNV.Rows.Clear();
                List<NhanVien> dsNV = NhanVienDAO.TimKiemDienThoai(txtTimNV.Text);
                for (int i = 0; i < dsNV.Count; i++)
                {
                    dgvNV.Rows.Add(dsNV[i].ID, dsNV[i].HoTen, dsNV[i].Luong, dsNV[i].DiaChi, dsNV[i].CMND, dsNV[i].DienThoai);
                    dgvNV.Rows[dgvNV.RowCount - 1].Tag = dsNV[i];
                }
            }
        }

        //click vào gridview nhân viên
        private void dataGridNV_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            txtHoTenNV.Text = dgvNV.Rows[e.RowIndex].Cells[1].Value.ToString();
            txtLuong.Text = dgvNV.Rows[e.RowIndex].Cells[2].Value.ToString();
            txtDiaChiNV.Text = dgvNV.Rows[e.RowIndex].Cells[3].Value.ToString();
            txtCMNDNV.Text = dgvNV.Rows[e.RowIndex].Cells[4].Value.ToString();
            txtDienThoaiNV.Text = dgvNV.Rows[e.RowIndex].Cells[5].Value.ToString();
        }

        #endregion

    }
}
